//导入express
const express=require("express")

//创建express实列
const app=express()

//把/uploads配置为静态资源服务器
app.use('/uploads',express.static('./uploads'))

//解析表单数据
app.use(express.urlencoded({extended:false}))

//配置cors解决跨域问题
const cors=require("cors")
app.use(cors())

//自封装一个res.cc()用于返回结果
app.use((req,res,next)=>{
    res.cc=function(err,status=1){//默认为1，即默认为错误状态
        res.send({
            status,
            //判断err是否为错误对象
            message:err instanceof Error ? err.message : err
        })
    }
    next()
})

//配置解析toekn字符串的中间件
const expressJwt=require("express-jwt")
//获得密钥
const config=require("./config")

//注册解析token字符串的中间件/api下的接口不需要token
app.use(expressJwt({secret:config.jwtserertkey}).unless({path:[/^\/api\//]}))

//导入用户路由接口模块
const userRouter=require("./router/user")
//注册用户路由接口模块
app.use("/api",userRouter)

//导入并注册用户信息接口模块
const userInfoRouter=require("./router/userinfo")
app.use("/my",userInfoRouter)

//导入并注册文章分类模块
const catesRouter=require("./router/cates")
app.use("/my/article",catesRouter)

//导入并注册文章模块
const articleRouter=require("./router/article")
app.use('/my/article',articleRouter)

const Joi = require("joi")
const { use } = require("./router/article")
//注册用户错误处理
app.use((err,req,res,next)=>{
    //表单校验引起的错误
    if(err instanceof Joi.ValidationError){
        return res.cc(err)
    }
    //无效token导致的错误
    if(err.name === 'UnauthorizedError') return res.cc("无效的token，身份认证失败!")
    //未知错误
    res.cc(err)
})


//开启8888端口
app.listen(8888,()=>{
    console.log("server runing at http://127.0.0.1:8888")
})